package com.atguigu.rabbitmq.day05;

import com.atguigu.rabbitmq.utils.RabbitMqUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;
import com.rabbitmq.client.Delivery;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * 消息的接收
 */
public class ReceiveLogs02 {

    //交换机名称  ctrl+shift+u可以把小写字母变大写
    public static final String EXCHANGE_NAME="logs";

    public static void main(String[] args) throws IOException, TimeoutException {
        Channel channel = RabbitMqUtils.getChannel();
        //声明一个交换机
        channel.exchangeDeclare(EXCHANGE_NAME,"fanout");

        //声明一个队列 临时的
        /**
         * 生成一个临时的队列，队列的名称是随机的
         * 当消费者断开与队列的连接的时候 队列就自动删除了
         */
        String queueName = channel.queueDeclare().getQueue();
        /**
         * 绑定交换机与队列
         */
        channel.queueBind(queueName,EXCHANGE_NAME,"");//routingKey可以是空串
        System.out.println("等待接收消息，把接收的消息打印在控制台上。。。。。。。");

        //下边接收消息(之前都写过)

        DeliverCallback deliverCallback=(String consumerTag, Delivery message)->{
            System.out.println("ReceiveLogs02控制台打印接收到的消息："+new String(message.getBody(),"UTF-8"));
        };
        //这里消费者取消消息时回调接口没写
        /*可以把取消消息的回调CancelCallback直接写在basicConsume方法里，不用拆出来写，但是basicConsume的后两个参数不能写null，你里边可以没有东西，但是不能是null*/
        channel.basicConsume(queueName,true,deliverCallback,consumerTag -> {});



    }
}
